package com.zhongfl.crm.service.boss;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.zhongfl.crm.enums.boss.CommonLogType;

import java.beans.IntrospectionException;
import java.lang.annotation.Annotation;

/**
 * 所有对象都可以使用的日志接口, 不要动。
 */
public interface CommonLogAtomService {

    /**
     * 添加有前后对比的日志
     *
     * @param type    类型
     * @param typeExt 子类型
     * @param key     数据Key
     * @param source  原始数据 只接受 Bean 对象
     * @param target  更改后数据 只接受 Bean 对象
     * @param user    操作人
     */
    void add(CommonLogType type, CommonLogType typeExt,
             String key,
             Object source,
             Object target,
             String user) throws JsonProcessingException, IntrospectionException;

    /**
     * 添加有前后对比的日志, 只对比有 {@see FieldMeta} 注解的字段
     *
     * @param type
     * @param typeExt
     * @param key
     * @param source
     * @param target
     * @param user
     * @param compareAnnotationType
     * @throws JsonProcessingException
     * @throws IntrospectionException
     */
    void add(CommonLogType type, CommonLogType typeExt,
             String key,
             Object source,
             Object target,
             String user,
             final Class<? extends Annotation> compareAnnotationType) throws JsonProcessingException, IntrospectionException;


    /**
     * 添加自定义消息日志
     *
     * @param type    类型
     * @param typeExt 子类型
     * @param key     数据Key
     * @param msg     日志消息体
     * @param user    更改后数据
     */
    void add(CommonLogType type,
             CommonLogType typeExt,
             String key,
             String msg,
             String user) throws JsonProcessingException, IntrospectionException;
}
